//
//  CYListViewHeader.h
//  Demo
//
//  Created by lc4y on 2017/11/5.
//  Copyright © 2017年 lc4y. All rights reserved.
//

#ifndef CYListViewHeader_h
#define CYListViewHeader_h

#import "Masonry.h"
#import "MJRefresh.h"
#import "UITableViewRowAction+Index.h"
#import "UIViewProperty.h"
#import "CYNoDataView.h"

#define kCYCustomCellID NSString
#define kCYCustomHeaderID NSString
#define kCYCustomFooterID NSString

typedef void(^HeaderRefreshCallBack)(void);
typedef void(^FooterRefreshMoreCallBack)(void);

typedef enum : NSUInteger {
    CYListViewTableView,
    CYListViewCollectionView,
    CYListViewTypeMax
} CYListViewType;

@protocol CYBaseViewCellDelegate <NSObject>

@optional

/**
     返回当前需要的CellID
     如果只有一种cell则不需要使用该方法 只要使用注册cell方法即可
     如果多种cell 必须返回满足条件的cellID 并且要注册cell
 **/
- (kCYCustomCellID *)cy_cellIDWithIndexPath:(NSIndexPath *)indexPath;

/**
 返回当前需要的headerID
 如果只有一种sectionHeader则不需要使用该方法 只要使用注册sectionHeader方法即可
 如果多种sectionHeader 必须返回满足条件的sectionHeaderID 并且要注册sectionHeader
 **/
- (kCYCustomHeaderID *)cy_sectionHeaderIDWithSection:(NSInteger)section;

/**
 返回当前需要的footerID
 如果只有一种sectionFooter则不需要使用该方法 只要使用注册sectionFooter方法即可
 如果多种sectionFooter 必须返回满足条件的sectionFooterID 并且要注册sectionFooter
 **/
- (kCYCustomFooterID *)cy_sectionFooterIDWithSection:(NSInteger)section;

/**
     编辑按钮
 **/

- (NSArray <NSString *>*)cy_cellEditIndexPath:(NSIndexPath *)indexPath;

/**
     编辑按钮点击事件
 **/
- (void)cy_cellEditButtonClickAtIndex:(NSInteger)index indexPath:(NSIndexPath *)indexPath;

/**
     刷新sectionHeader方法
 **/
- (void)cy_refreshHeader:(id)headerView section:(NSInteger)section;

/**
 刷新sectionHeader方法
 **/
- (void)cy_refreshFooter:(id)footerView section:(NSInteger)section;

@required
/**
     刷新cell的方法
 **/
- (void)cy_refreshCell:(id)cell indexPath:(NSIndexPath *)indexPath;

@end


#endif /* CYListViewHeader_h */
